/// TODO: 添加针对不同模式，比如debug进行打包区分


const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');

let pack_task_demo3 = {
    "name" : "demo3",
    "entry" : {"demo3" : "./src/demo3/demo3.js"},
    "copy_parrents" : [{ from: './src/demo3/demo3.html', to: 'demo3.html' }]
};

module.exports = (env, argv) => {
    // webpack --mode development --demo demo1
    const mode = argv.mode || "development";
    const target = argv.target || "all";
    // 默认不打包资源
    const pack_assets = Number(typeof env.pack_assets !== 'undefined' ? env.pack_assets : false);

    console.log('mode=%s,target=%s,pack_assets=%s', mode, target, pack_assets)

    // 入口
    entry_map = {
        demo1: './src/demo1/demo1.js',
        demo2: './src/demo2/demo2.js',
    }
    for (let key in pack_task_demo3["entry"]) {
        entry_map[key] = pack_task_demo3["entry"][key]
    }

    // 处理copy任务
    let copy_patterns = []
    let copy_parrerns_map = {}
    copy_parrerns_map['demo1'] = [{ from: './src/demo1/demo1.html', to: 'demo1.html' }]
    copy_parrerns_map['demo2'] = [{ from: './src/demo2/demo2.html', to: 'demo2.html' }]
    if (target == 'all') {
        for (let key in copy_parrerns_map) {
            copy_patterns = copy_patterns.concat(copy_parrerns_map[key])
        }
        // 分离定义
        for (let key in pack_task_demo3["copy_parrents"]) {
            copy_patterns = copy_patterns.concat(pack_task_demo3["copy_parrents"][key])
        }
    } else {
        copy_patterns = copy_patterns.concat(v)
    }
    if (pack_assets > 0) {
        copy_patterns.push({ from: './assets/', to: 'assets' })
    }

    return {
        entry: entry_map,
        output: {
            filename: '[name].bundle.js',  // 这里的name对应entry中的key
            path: path.resolve(__dirname, 'dist'),  // 指定输出文件的存放路径，__dirname是当前脚本所在目录
        },
        resolve: {
            alias: {
                // createjs和正常的npm包目录结构不太一样，需要修复一下
                createjs: path.resolve(__dirname, 'node_modules/createjs/builds/1.0.0/createjs.min.js')
            }
        },
        module: {
            rules: [
                {
                    // test表示指定一个正则表达式
                    // 对所有以 .js 结尾的文件进行处理
                    test: /\.js$/,
                    // 不对node_modules目录下的文件进行处理，这里也是一个正则表达式
                    exclude: /node_modules/,
                    // 告诉webpack当发现匹配的文件时，使用babel-loader来处理这些文件，babel-loader可以将新版的JavaScript代码转换为可以在各种浏览器中运行的代码。
                    use: {
                        loader: 'babel-loader'
                    }
                }
            ]
        },
        plugins: [
            new CopyPlugin({
                patterns: copy_patterns,
            }),
            // ES校验
            new ESLintPlugin({
                // 指定要进行 ESLint 检查的目录
                context: path.resolve(__dirname, 'src'),
                // 是否在构建过程中将错误输出到控制台
                emitError: true,
                // 是否在构建过程中将警告输出到控制台
                emitWarning: true,
                // 是否将 ESLint 检查结果输出为文件
                outputReport: false,
            }),
        ],
        // 开启source-map，调试使用
        devtool: 'source-map',
        // optimization: {
        //     splitChunks: {
        //     chunks: 'all',
        //     minSize: 244 * 1024, // 最小文件大小，单位为字节
        //     },
        // },
    };
};